package reflect;


import java.lang.reflect.Method;

public class ReflectDemo06 {
    public static void main(String[] args) throws Exception {
        /*
         * 使用反射API 执行 无参数方法
         */
        //加载类 获得Class对象
        Class cls = Class.forName("reflect.Worker");
        //创建对象
        Object obj = cls.newInstance();
        //查找需要执行的方法: Declared 声明，Method 方法
        // getDeclaredMethod(方法名,参数类型1,参数类型2...) 在类查找指定的方法
        Method method = cls.getDeclaredMethod("work");
        // method 就代表找到的方法
        System.out.println(method);
        // 调用方法： invoke(包含方法对象，参数1，参数2)
        method.invoke(obj); //执行obj的方法

        /*
         * 调用有参数的方法
         * 执行 Worker 的 workWith(String) 方法
         */
        //找到有参数的方法
        method = cls.getDeclaredMethod("workWith", String.class);
        //调用有参数方法
        method.invoke(obj, "Jerry");

        /*
         * 编写案例，测试执行两个参数的方法
         * - Worker添加两个参数的方法
         * - 利用反射找到并且执行两个参数的方法
         */
    }
}
